package client;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.util.LinkedList;

import javax.swing.BorderFactory;
import javax.swing.JPanel;

import metier.modele.Constantes;
import metier.modele.Figure;
import metier.modele.Utilisateur;

public class panUsers extends JPanel {

	private static final long serialVersionUID = 3129326811023178098L;

	private LinkedList<Utilisateur> lUtilisateur;
	private Utilisateur user;

	/**
	 * Constructeur
	 */
	public panUsers()
	{
		lUtilisateur = new LinkedList<Utilisateur>();
		setBackground(Color.LIGHT_GRAY);
		setForeground(Color.BLACK);
		setBorder(BorderFactory.createEtchedBorder());
	}

	/**
	 * Repaint du panel
	 */
	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		Color[] couleurs = Figure.couleursClients;

		String nomClient;
		int tailleMax = 0;
		FontMetrics fm = g.getFontMetrics();

		g.setColor(Color.BLACK);
		g.drawString("En ligne :", 10, 20);
		tailleMax = fm.stringWidth("En ligne :");
		
		orderList();
		
		for (int i = 0; i < lUtilisateur.size(); i++)
		{
			nomClient = lUtilisateur.get(i).getNom();
			if (nomClient != null
					&& user != null
					&& nomClient.equalsIgnoreCase(user.getNom()))
				g.setFont(Constantes.FONT_BOLD);
			else
				g.setFont(Constantes.FONT_PLAIN);
			g.setColor(couleurs[i % couleurs.length]);
			g.drawString("- " + nomClient, 10, 20 * (i + 2));

			// Calcul la longueur du message {Mise � jour de la taille du
			// panneau}.

			fm = g.getFontMetrics();
			if (fm.stringWidth("- " + nomClient) > tailleMax)
				tailleMax = fm.stringWidth("- " + nomClient);
		}

		setPreferredSize(new Dimension(tailleMax + 20, this.getHeight()));
		revalidate();
	}
	
	/**
	 * Met l'utilisateur local en haut de la liste
	 */
	public void orderList()
	{
		Utilisateur tmp;
		for (int i = 0; i < lUtilisateur.size(); i++)
		{
			Utilisateur u = lUtilisateur.get(i);
			if (u != null
					&& user != null
					&& u.getNom() != null
					&& user.getNom() != null 
					&& u.getNom().equalsIgnoreCase(user.getNom()))
			{
				if (i == 0)
					return;
				// Echange
				tmp = lUtilisateur.get(0);
				lUtilisateur.set(0, u);
				lUtilisateur.set(i, tmp);
				return;
			}
		}
	}
	
	/**
	 * Supprime un utilisateur de la liste
	 * @param user
	 */
	public void removeUser (Utilisateur user)
	{
		for (int i = 0; i < lUtilisateur.size(); i++)
		{
			Utilisateur u = lUtilisateur.get(i);
			if (u.getNom().equalsIgnoreCase(user.getNom()))
			{
				lUtilisateur.remove(i);
				return;
			}
		}
	}
	
	
	public LinkedList<Utilisateur> getList() {
		return lUtilisateur;
	}
	
	public void setUser(Utilisateur user) {
		this.user = user;
	}

}